/*
 * 文 件 名:  Test.java
 * 版    权:   深圳埃思欧纳信息咨询有限公司版权所有. YYYY-YYYY,  All rights reserved
 * 描    述:   <描述>
 * 修 改 人:  honny.huang
 * 修改时间: 2011-5-9
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package com.annotation;
import java.lang.annotation.Documented;      
import java.lang.annotation.Inherited;      
import java.lang.annotation.Retention;      
import java.lang.annotation.Target;      
import java.lang.annotation.ElementType;      
import java.lang.annotation.RetentionPolicy;      
     
/**
 * 注解（Annotation） 为我们在代码中天界信息提供了一种形式化的方法，是我们可以在稍后   
  
    某个时刻方便地使用这些数据（通过 解析注解 来使用这些数据）。   
  
    注解的语法比较简单，除了@符号的使用以外，它基本上与java的固有语法一致，java内置了三种   
  
    注解，定义在java.lang包中。   
  
      @Override 表示当前方法是覆盖父类的方法。   
  
      @Deprecated  表示当前元素是不赞成使用的。   
  
      @SuppressWarnings表示关闭一些不当的编译器警告信息。
      
      
1、 java annonation 出现的背景 
    javadoc——ejbDoclet——xDoclet——annotation  

2、 java annonation基本概念与功能 
    元数据、override、deprected、suppressWarnings 

3、 自定义注解 
    Target（ElementType决定目标类型）、Retention、Docomented、Inherited 

4、 读取注解（要想使定义的注解起作用就必须得去读取它， 需要用到反射技术） 
     注意： 要想使用反射去读取注解，必须将Retention的值选为Runtime 

    ^_^ ^_^ 至此总算对注解有一个较为全面的认识了。 

  总结： 
1、 注解的作用：可以用来创建文档，跟踪代码的依赖性，执行编译时格式检查，代替已有的配置文件 ( 如 Hibernate 也提供了注释配置 ) 


2、自定义注解的实现： 自定义注解，利用反射获取到注解中的值，然后再将获得的所有值按照一定的格式输出文档。[img][/img] 

 */
/*    
 * 元注解@Target,@Retention,@Documented,@Inherited    
 *     
 *     @Target 表示该注解用于什么地方，可能的 ElemenetType 参数包括：    
 *         ElemenetType.CONSTRUCTOR 构造器声明    
 *         ElemenetType.FIELD 域(字段)声明（包括 enum 实例）    
 *         ElemenetType.LOCAL_VARIABLE 局部变量声明    
 *         ElemenetType.METHOD 方法声明    
 *         ElemenetType.PACKAGE 包声明    
 *         ElemenetType.PARAMETER 参数声明    
 *         ElemenetType.TYPE 类，接口（包括注解类型）或enum声明    
 *             
 *     @Retention 表示在什么级别保存该注解信息。可选的 RetentionPolicy 参数包括：    
 *         RetentionPolicy.SOURCE 注解将被编译器丢弃    
 *         RetentionPolicy.CLASS 注解在class文件中可用，但会被VM丢弃    
 *         RetentionPolicy.RUNTIME VM将在运行期也保留注释，因此可以通过反射机制读取注解的信息。    
 *             
 *     @Documented 将此注解包含在 javadoc 中    
 *         
 *     @Inherited 允许子类继承父类中的注解    
 *       
 */     
@Target(ElementType.METHOD)      
@Retention(RetentionPolicy.RUNTIME)      
@Documented     
@Inherited     
/*    
 * 定义注解 Test    
 * 注解中含有两个元素 id 和 description    
 * description 元素 有默认值 "no description"    
 */     
public @interface Test {      
    public int id();      
    public String description() default "no description";      
}     
  
